package com.webserver.core;

import com.webserver.http.HttpContext;
import com.webserver.http.HttpServletRequest;
import com.webserver.http.HttpServletResponse;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/*
该类用来处理请求的工作
 */
public class DispatcherServlet {//Dispatcher开发器
    /*
    1：提供静态的私有的当前类的属性
    2：私有构造方法
    3：提供静态的公开的获取当前类实例的方法
    在方法中可判断步骤1的静态属性是否为null，是，则实例化对象（仅此一次）
    否则直接放回
     */
    //经典单例模式
    private static DispatcherServlet obj;

    private DispatcherServlet() {

    }

    public static DispatcherServlet getInstance() {
        if (obj == null) {
            obj = new DispatcherServlet();
        }
        return obj;
    }


    public void service(HttpServletRequest request, HttpServletResponse response) {//不用写构造方法，直接传参数
        String path = request.getUri();
        //将./webapps/myweb/index.html响应给浏览器
        File file = new File("./webapps" + path);
        if (file.isFile()) {//如果定位是文件
            response.setEntity(file);
            /*
            1:通过file获取文件名（浏览器请求的文件名字）
            比如：logo.png
            2:根据文件名可以截取出后缀部分（String的相关方法）
            比如：png
            3:根据后缀值设置Content-Type的值
            比如：
            response.addHeader("Content-Type","image/png")
             */


        } else {//不是文件(要么不存在,要么是目录,404情况)
            file = new File("./webapps/root/404.html");
            response.setStatusCode(404);
            response.setStatusReason("NotFound");
            response.setEntity(file);
        }
        response.addHeader("Server", "WebServer");
    }
}
